home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / jpged26s.lzh / Save.s < prev    next >
Encoding:
Text File  |  1996-11-10  |  9.1 KB  |  542 lines

  1. *
  2. *
  3. *       SAVE.S
  4. *
  5. *
  6. include  DOSCALL.MAC
  7. include  JPEG.MAC
  8. include     work.inc
  9.   .text
  10. *
  11.     .xref    Memory_error
  12.     .xref    EOI,SOI,APP,COM,COM0,DQT,QtableL0,QtableC0,DHT,SOF,SOS,SOS_mono
  13.     .xref    PutBlock,preENCODE,postENCODE
  14.     .xref    make_DCT_table
  15.     .xref    make_RGB_YUV_table
  16.     .xref    make_ENCODE_table
  17.     .xref    init_vwork
  18.     .xref    getmem_1block_line
  19.     .xref    getmem_file_buf
  20.     .xref    OptHuffmanTable
  21.     .xref    ClrRateTable
  22.  
  23.     .xref    Comment_not_found
  24.     .xref    Qtable_not_found
  25.     .xref    VS_not_found
  26.     .xref    Read_error
  27.     .xref    Write_error
  28.  
  29.     .xref    DHTDCL,DHTACL,DHTDCC,DHTACC
  30.  
  31.     .xref    clear_area
  32.     .xref    PrintW
  33.     .xref    PrintWI
  34.     .xref    PrintHex
  35.     .xref    PrintHex8
  36.     .xref    DumpMem
  37.     .xref    CRLF
  38.  
  39. VRAM   equ $C00000
  40. *
  41.     .xdef    Save
  42. *
  43. *
  44. *
  45. Save
  46.     *ê│Åkùpé╠▄░╕┤╪▒èmò█
  47.     *----------------------------------
  48.     move.l    free_adrs(a6),a2
  49.     move.l    free_size(a6),d5
  50.     move.l    #save_work_size,d1
  51.     sub.l    d1,d5
  52.     bcs    Memory_error
  53.     adda.l    d1,a2
  54.     move.l    a2,buff_adrs(a6)
  55.     move.l    d5,buff_size(a6)
  56.  
  57.     *ŵÄZ├░╠▐┘ì∞ɼ
  58.     *------------------------
  59.     bsr    make_DCT_table
  60.     bsr    make_RGB_YUV_table
  61.  
  62.     *ëµû╩è╓îWé╠▄░╕┤╪▒Åëè·ë╗
  63.     *------------------------
  64.     move.w    HE(a6),d0
  65.     sub.w    HS(a6),d0
  66.     addq.w    #1,d0
  67.     move.w    d0,Xline(a6)
  68.     move.w  VE(a6),d0
  69.     sub.w    VS(a6),d0
  70.     addq.w    #1,d0
  71.     move.w    d0,Yline(a6)
  72.     bsr    init_vwork
  73.  
  74.     *ëµæ£ÄµéΦì₧é▌╩▐»╠ºèmò█
  75.     *------------------------
  76.     bsr    getmem_1block_line
  77.  
  78.     *ëµæ£ò█æ╢âoâbâtâ@èmò█üiì┼æσéUéSéjéaüj
  79.     *------------------------
  80.     bsr    getmem_file_buf
  81.  
  82.     *ëµæ£ò█æ╢
  83.     *---------------------------
  84.     bsr    ReadQtable
  85.     bsr    SetQtable
  86.     tst.w    EncodePath(a6)
  87.     beq    @f            1╩▀╜é┼ê│Åk
  88.     bsr    ClrRateTable
  89.     bsr    preENCODE
  90.     bsr    PutImage
  91.     bsr    OptHuffmanTable
  92.     bsr    ClrRateTable
  93.     clr.w    EncodePath(a6)
  94. @@
  95.     bsr    make_ENCODE_table
  96.     bsr    Put_Header
  97.     bsr    preENCODE
  98.     bsr    PutImage
  99.     bsr     postENCODE
  100.  
  101.     *ëµæ£ÅIù╣║░─▐Åæé½ì₧é▌
  102.     *---------------------------
  103.     move.l  #2,-(sp)
  104.     pea.l    EOI(pc)
  105.     move.w    Jhandle(a6),-(sp)
  106.     dos    _WRITE
  107.     tst.l    d0
  108.     bmi    Write_error
  109.  
  110.     *âtâ@âCâïé≡ò┬é╢éΘ
  111.     *---------------------------
  112.     dos    _CLOSE
  113.     lea.l    4+4(sp),sp
  114.  
  115.     clr.w    (sp)
  116.     dos    _EXIT
  117.  
  118. ***************************************
  119. *
  120. *    ëµæ£æSæ╠┤▌║░─▐
  121. *
  122. ***************************************
  123. PutImage
  124.     *ë╝æzëµû╩╠º▓┘ÄwÆΦé╠ÅΩìçé═üAé╗éΩé≡âIü[âvâô
  125.     *---------------------------
  126.     btst.b    #5,Sys_flag2(a6)
  127.     beq    @f
  128.  
  129.     clr.w    -(sp)
  130.     pea.l    VSname(a6)
  131.     dos    _OPEN
  132.     addq.w    #4+2,sp
  133.     tst.l    d0
  134.     bmi    VS_not_found
  135.  
  136.     move.w    d0,VShandle(a6)
  137. @@
  138.     *âXü[âpü[âoâCâUü[âéü[âhé╔ê┌ìs
  139.     *-----------------------
  140.     clr.l    -(sp)
  141.     dos    _SUPER
  142.     move.l    d0,(sp)
  143.  
  144.     *ëµæ£ò█æ╢âAâhâîâXîvÄZ
  145.     *-----------------------
  146.     move.w    VS(a6),d0
  147.     mulu.w    VSXsize(a6),d0
  148.     add.l    d0,d0
  149.     movea.l    VSadr(a6),a5
  150.     adda.l    d0,a5
  151.     move.w    HS(a6),d0
  152.     add.w    d0,d0
  153.     adda.w    d0,a5
  154.  
  155.   *ëµæ£ò█æ╢èJÄn
  156.   *-----------------------
  157.     move.w    VSXsize(a6),d5
  158.     mulu.w    DeltaY(a6),d5
  159.     add.l   d5,d5
  160.     move.w    Yline(a6),d6
  161. save20
  162.     movem.l    d5-d6/a5,-(sp)
  163.     bsr    PutBlock
  164.     tst.w    d0
  165.     bmi    Write_error
  166.     movem.l    (sp)+,d5-d6/a5
  167.     add.l    d5,a5
  168.     sub.w    DeltaY(a6),d6
  169.     bhi    save20
  170.  
  171. *âåü[âUü[âéü[âhé╔ê┌ìs
  172. *-----------------------
  173.     dos    _SUPER
  174.  
  175.     btst.b    #5,Sys_flag2(a6)
  176.     beq    @f
  177.  
  178.     move.w    VShandle(a6),(sp)
  179.     dos    _CLOSE
  180.     tst.l    d0
  181.     bmi    Read_error
  182. @@
  183.     addq.l    #4,sp
  184.     rts
  185. ***************************************
  186. *
  187. *    ║╥▌─Åεò±Åoù═
  188. *
  189. ***************************************
  190. .xdef Put_Comment
  191. Put_Comment
  192.   tst.b   Cflag(a6)
  193.   bne     putcom20
  194. *
  195.   moveq.l #0,d0
  196.   move.w  COM+2(pc),d0
  197.   addq.l  #2,d0
  198.   move.l  d0,-(sp)
  199.   pea     COM(pc)
  200.   move.w  d5,-(sp)
  201.   dos     _WRITE
  202.   lea     10(sp),sp
  203.   tst.l   d0
  204.   bmi     Write_error
  205.   rts
  206. *
  207. *
  208. *  Count Comment
  209. *
  210. putcom20
  211.   moveq   #0,d3
  212.   cmp.b   #'"',Cflag(a6)
  213.   bne     putcom40
  214. *
  215.   move.l  a0,-(sp)
  216.   lea     Comment(a6),a0
  217.   bsr     CountCOM
  218.   move.l  (sp)+,a0
  219.   pushl   d3
  220.   addq.w  #2,d3
  221.   move.w  d3,-(sp)
  222.   move.w  COM(pc),-(sp)
  223. *
  224.   pushl   #4
  225.   pea     4(sp)
  226.   move.w  d5,-(sp)
  227.   dos     _WRITE
  228.   tst.l   d0
  229.   bmi     Write_error
  230.   lea     10+2+2(sp),sp
  231. *
  232.   popl    d3
  233.   pushl   d3
  234.   pea     Comment(a6)
  235.   move.w  d5,-(sp)
  236.   dos     _WRITE
  237.   tst.l   d0
  238.   bmi     Write_error
  239.   lea     10(sp),sp
  240.   rts
  241. *
  242. *  âRâüâôâgâtâ@âCâïé╠Åoù═
  243. *
  244. putcom40
  245.   clr.w   -(sp)
  246.   pea     Comment(a6)
  247.   dos     _OPEN
  248.   move.l  d0,d4
  249.   bmi     Comment_not_found
  250.   addq.l  #6,sp
  251. putcom50
  252.     pushw   d4
  253.     dos     _FGETC
  254.     addq.l  #2,sp
  255.     tst.l   d0
  256.     bmi     putcom60
  257.     cmp.b   #$1A,d0
  258.     beq     putcom60
  259.       addq.w    #1,d3
  260.       bra       putcom50
  261. putcom60
  262.     pushw   d4
  263.     dos     _CLOSE
  264.     addq.l  #2,sp
  265. *
  266.   addq.w  #2,d3
  267.   move.w  d3,-(sp)
  268.   move.w  COM(pc),-(sp)
  269.   pushl   #4
  270.   pea     4(sp)
  271.   move.w  d5,-(sp)
  272.   dos     _WRITE
  273.   tst.l   d0
  274.   bmi     Write_error
  275.   lea     10+2+2(sp),sp
  276. *
  277.   clr.w   -(sp)
  278.   pea     Comment(a6)
  279.   dos     _OPEN
  280.   move.l  d0,d4
  281.   addq.l  #6,sp
  282. *
  283. putcom70
  284.     pushw   d4
  285.     dos     _FGETC
  286.     addq.l  #2,sp
  287.     tst.l   d0
  288.     bmi     putcom80
  289.     cmp.b   #$1A,d0
  290.     beq     putcom80
  291.       pushw   d5
  292.       pushw   d0
  293.       dos     _FPUTC
  294.       addq.l  #4,sp
  295.       tst.l   d0
  296.       beq     Write_error
  297.       bra     putcom70
  298. putcom80
  299.     pushw   d4
  300.     dos     _CLOSE
  301.     addq.l  #2,sp
  302.   rts
  303. *
  304. *
  305. CountCOM
  306.   move.b  (a0)+,d0
  307.   beq     countcom90
  308.     addq.w  #1,d3
  309.     bra     CountCOM
  310. countcom90
  311.   rts
  312. *
  313. PutCOM
  314.   move.b  (a0)+,d0
  315.   beq     putcom90
  316.     pushw   d5
  317.     pushw   d0
  318.     dos     _FPUTC
  319.     tst.l   d0
  320.     beq     Write_error
  321.     addq.l  #4,sp
  322.     bra     PutCOM
  323. putcom90
  324.   rts
  325. *
  326. *
  327. *
  328. .xdef Put_Header
  329. Put_Header
  330. *
  331.   lea.l   SOI(pc),a0
  332.  
  333.   move.w  #$20,-(sp)
  334.   pea     fname(a6)
  335.   dos     _CREATE
  336.   addq.l  #6,sp
  337.   move.w  d0,Jhandle(a6)
  338.   bmi     Write_error
  339.   move.w  d0,d5
  340. *
  341.   move.w  Aspect(a6),d0
  342.   beq     puthead10
  343.     move.w  d0,APP+12-SOI(a0)
  344.     move.w  Aspect+2(a6),d0
  345.     move.w  d0,APP+14-SOI(a0)
  346. puthead10
  347.   move.l  #20,-(sp)
  348.   pea     SOI(pc)
  349.   move.w  d5,-(sp)
  350.   dos     _WRITE
  351.   tst.l   d0
  352.   bmi     Write_error
  353.   lea     10(sp),sp
  354. *
  355.   bsr     Put_Comment
  356. *
  357.   move.w  Xline(a6),d0
  358.   move.b  d0,SOF+8-SOI(a0)
  359.   lsr.w   #8,d0
  360.   move.b  d0,SOF+7-SOI(a0)
  361.   move.w  Yline(a6),d0
  362.   move.b  d0,SOF+6-SOI(a0)
  363.   lsr.w   #8,d0
  364.   move.b  d0,SOF+5-SOI(a0)
  365. *
  366.   move.b  #$11,d1
  367.   move.b  uvmode(a6),d0
  368.   subq.b  #1,d0
  369.   beq     puthead200
  370.   move.b  #$21,d1
  371.   subq.b  #1,d0
  372.   beq     puthead200
  373.   move.b  #$22,d1
  374. *
  375. puthead200
  376.   move.b  d1,SOF+11-SOI(a0)
  377.  
  378.     moveq.l    #3,d1
  379.     tst.b    colormode(a6)
  380.     beq    puthead300
  381.     moveq.l    #1,d1
  382. puthead300
  383.     move.b    d1,SOF+9-SOI(a0)
  384.  
  385. *DQTÅæé½ì₧é▌
  386. *----------------------
  387.     move.l    #2+(1+64)*2,d1
  388.     move.l    #2+(1+64)*1,d0
  389.     lea.l   DQT(pc),a0
  390.     bsr    PutHead_sub
  391.  
  392. *DHTÅæé½ì₧é▌
  393. *----------------------
  394.     moveq.l    #0,d1
  395.     move.w    DHT+2(pc),d1
  396.     lea.l   DHT(pc),a0
  397.     bsr    puthead_sub10
  398.  
  399. *SOFÅæé½ì₧é▌
  400. *----------------------
  401.     move.l    #2+15,d1
  402.     move.l    #2+9,d0
  403.     lea.l   SOF(pc),a0
  404.     bsr    PutHead_sub
  405.  
  406. *SOSÅæé½ì₧é▌
  407. *----------------------
  408.     lea.l   SOS(pc),a0
  409.     move.l    #2+10+2,d1
  410.  
  411.     tst.b    colormode(a6)
  412.     beq    puthead_SOS    *╢╫░ëµæ£é┼éáéΘ
  413.  
  414.     lea.l   SOS_mono(pc),a0
  415.     move.l    #2+6+2,d1
  416.  
  417. puthead_SOS
  418.  
  419.     move.l    d1,-(sp)
  420.     move.l    a0,-(sp)
  421.     move.w    d5,-(sp)
  422.     dos    _WRITE
  423.     lea.l    10(sp),sp
  424.     cmp.l    d0,d1
  425.     bne    Write_error        *Åæé½ì₧é▌é╔Ä╕ös
  426.     rts
  427.  
  428.  
  429.  
  430.  
  431.  
  432. PutHead_sub
  433.     tst.b    colormode(a6)
  434.     beq    puthead_sub10    *╢╫░ëµæ£é┼éáéΘ
  435.     move.l    d0,d1
  436. puthead_sub10
  437.  
  438.     ror.w    #8,d1
  439.     move.b    d1,2(a0)
  440.     ror.w    #8,d1
  441.     move.b    d1,2+1(a0)
  442.     addq.l    #2,d1
  443.     move.l    d1,-(sp)
  444.     move.l    a0,-(sp)
  445.     move.w    d5,-(sp)
  446.     dos    _WRITE
  447.     lea.l    10(sp),sp
  448.     cmp.l    d0,d1
  449.     bne    Write_error        *Åæé½ì₧é▌é╔Ä╕ös
  450.     rts
  451. *
  452. *
  453. *  ù╩Äqë╗âeü[âuâïé╠ô╟ì₧
  454. *
  455. ReadQtable
  456.   tst.b   Qname(a6)
  457.   beq     readq90
  458. *
  459.   clr.w   -(sp)
  460.   pea     Qname(a6)
  461.   dos     _OPEN
  462.   move.w  d0,d5
  463.   bmi     Qtable_not_found
  464.   addq.l  #6,sp
  465.   pushl   #64
  466.   pea     DQT+5(pc)
  467.   pushw   d5
  468.   dos     _READ
  469.   cmp.l   #64,d0
  470.   bne     Qtable_not_found
  471.   lea     10(sp),sp
  472.  
  473.     tst.b    colormode(a6)
  474.     bnz    readq80            *╙╔╕█ëµæ£é┼éáéΘ
  475.  
  476.   pushl   #64
  477.   pea     DQT+70(pc)
  478.   pushw   d5
  479.   dos     _READ
  480.   cmp.l   #64,d0
  481.   bne     Qtable_not_found
  482.   lea     10(sp),sp
  483. readq80
  484.   pushw   d5
  485.   dos     _CLOSE
  486.   addq.l  #2,sp
  487. readq90
  488.   rts
  489. *
  490. *  ù╩Äqë╗âeü[âuâïé╠É▌ÆΦ
  491. *
  492. SetQtable
  493.  
  494.   *û╛ôxɼò¬(Y)é╠ù╩Äqë╗âeü[âuâïì∞ɼ
  495.   *------------------------
  496.   move.w  Qlevel(a6),d1
  497.   lea     DQT+5(pc),a0
  498.   lea     QtableL(a6),a1
  499.   move.w  #63,d2
  500. ll50
  501.     moveq   #0,d0
  502.     move.b  (a0),d0
  503.     divu    d1,d0
  504.     bne     ll55
  505.       moveq   #1,d0
  506. ll55
  507.     move.b  d0,(a0)+
  508.     move.w  d0,(a1)+
  509.     dbra    d2,ll50
  510. *
  511.   lea     DQT+70(pc),a0
  512.  
  513.   *ù╩Äqë╗âeü[âuâïé¬éQî┬ùpê╙é│éΩé─éóéΘé⌐üH
  514.   *éPî┬é╛é»ùpê╙é│éΩé─éóéΘÅΩìçé═üAÉFæèɼò¬(UV)éαû╛ôxɼò¬(Y)é╞ô»é╢ù╩Äqë╗âeü[âuâïé≡ùÿùpé╖éΘüB
  515.   *æSé¡ùpê╙é│éΩé─éóé╚éóÅΩìçé═üAâfâtâHâïâgé╠ù╩Äqë╗âeü[âuâïé≡ùÿùpé╖éΘ
  516.   *üiÅ«üASAVEô«ì∞é╠ÅΩìçé═üAâfâtâHâïâgé≡æIé╘éµéñé╔DQTadr(a6)é╠Ælé¬DQT+4é╔é╚é┴é─éóéΘ)
  517.   *---------------------------
  518.   lea     DQT+4+1+64(pc),a1
  519.   cmp.l   DQTadr(a6),a1
  520.   bne     ll56
  521.   lea     DQT+5(pc),a0
  522. ll56
  523.  
  524.   *ÉFæèɼò¬(UV)é╠ù╩Äqë╗âeü[âuâïì∞ɼ
  525.   *------------------------
  526.   lea     QtableC(a6),a1
  527.   move.w  #63,d2
  528. ll60
  529.     moveq   #0,d0
  530.     move.b  (a0),d0
  531.     divu    d1,d0
  532.     bne     ll65
  533.       moveq   #1,d0
  534. ll65
  535.     move.b  d0,(a0)+
  536.     move.w  d0,(a1)+
  537.     dbra    d2,ll60
  538.   rts
  539.  
  540.  
  541. .end
  542.